From d918a60f8913fec5dee77031ff986b8b6c94786e Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 3 Jul 2009 08:54:51 +0100 Subject: [PATCH] Fix c/s 19886: Must free pages after synchronously scrubbing them Signed-off-by: Keir Fraser --- xen/common/page_alloc.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index 9147e8a2b1..be28710a0f 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -1206,23 +1206,16 @@ void free_domheap_pages(struct page_info *pg, unsigned int order) spin_unlock_recursive(&d->page_alloc_lock); - if ( likely(!d->is_dying) ) - { - free_heap_pages(pg, order); - } - else - { - /* - * Normally we expect a domain to clear pages before freeing them, - * if it cares about the secrecy of their contents. However, after - * a domain has died we assume responsibility for erasure. - */ + /* + * Normally we expect a domain to clear pages before freeing them, if + * it cares about the secrecy of their contents. However, after a + * domain has died we assume responsibility for erasure. + */ + if ( unlikely(d->is_dying) ) for ( i = 0; i < (1 << order); i++ ) - { - page_set_owner(&pg[i], NULL); scrub_one_page(&pg[i]); - } - } + + free_heap_pages(pg, order); } else { -- 2.30.2